#include "myTask.h"
#include "myUart.h"
#include "cmsis_os.h"
#include "myDevice.h"
#include "myCan.h"
#include "nrf24l01.h"
#include "myKey.h"

u8 id_flag = 0;
void task_uart(void const * argument)
{
//	debug("开始执行uartTask04;");
  for(;;)
  {
		uart_receive();
    osDelay(1);
  }
}
void task_key(void const * argument)
{
	for(;;)
		{
//			read_key();
			osDelay(1);
		}
}
void task_led_work(void)
{
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_15);
	
	id_flag = !id_flag;									//控制OLED车辆编号指定位闪烁
}
void task_print_test(void)
{
	printf("hlly");
}
extern void key_scan(void);
extern void tcp_send(void);
static TASK_COMPONENTS Task_Comps[]=
{
//状态  计数  周期  函数
	{0, 500, 500, task_led_work},//芯片运行指示灯
	{0, 100, 100, ADC_dispose},
	{0, 100, 100, key_scan},//按键输入扫描
	{0, 300, 300, tcp_send},//网口发送
//	{0, 1500, 1500, task_canSend_test},
//	{0, 100, 100, NRF24L01_TX_test},
	{0, 10, 10, NRF24L01_RX_test},
//	{0,200,200,menu},
	{0,1000,1000,show_time},
	
	/* Add new task here */
};

uint8_t Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]);

//========================================================================
// 函数: Task_Handler_Callback
// 描述: 任务标记回调函数.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2012-10-22
//========================================================================
void Task_Marks_Handler_Callback(void)
{
	uint8_t i;
	for(i=0; i<Tasks_Max; i++)	//每次循环，某个任务的TIMCount就自减一次（前提是TIMCount不为0），然后对下个任务进行相同的操作。
	{
		if(Task_Comps[i].TIMCount)    /* If the time is not 0 */
		{
			Task_Comps[i].TIMCount--;  /* Time counter decrement */
			if(Task_Comps[i].TIMCount == 0)  /* If time arrives */
			{
				/*Resume the timer value and try again */
				Task_Comps[i].TIMCount = Task_Comps[i].TRITime;  
				Task_Comps[i].Run = 1;    /* The task can be run */
			}
		}
	}
}

//========================================================================
// 函数: Task_Pro_Handler_Callback
// 描述: 任务处理回调函数.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2012-10-22
//========================================================================
void Task_Pro_Handler_Callback(void)
{
	uint8_t i;
	for(i=0; i<Tasks_Max; i++)	//每次循环判断改任务是否可以执行，如果是，那么就是将标志位清零并调用对应的任务函数。
	{
		if(Task_Comps[i].Run) /* If task can be run */
		{
			Task_Comps[i].Run = 0;    /* Flag clear 0 */
			Task_Comps[i].TaskHook();  /* Run task */
		}
	}
}
